<?php
/**
 * Created by PhpStorm.
 * User: Season
 * Date: 2018/6/13
 * Time: 21:11
 */

class RegexTool
{
    //预设规则
    private $validate = [
        'require' => '/.+/',
        'email' => '/^\w+([-+.]\w+)*@\w+([-+.]\w+)+$/',
        'url' => '/(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/',
        'currency' => '/^d+(\.\d+)?$/',
        'number' => '/^d+$/',
        'zip' => '/^d{6}$/',
        'integer' => '/^[-\+]?d+$/',
        'double' =>  '/^[-\+]?d+(\.\d+)?$/',
        'english' => '/^[A-Za-z]+$/',
        'qq' => '/^\d{5,11}$/',
        'mobile' => '/^[1][3,4,5,7,8]\d{9}$/',
    ];
    //false只返回验证的结果bool，true返回匹配的结果数组
    private $returnMatchResult = false;
    //存放修正模式
    private $fixMode = null;
    //存放结果数组
    private $matches = [];
    //验证结果
    private $isMatch = false;

    public function  __construct($returnMatchResult = false,$fixMode = null)
    {
        $this->returnMatchResult = $returnMatchResult;
        $this->fixMode = $fixMode;
    }

    private function regex($pattern,$subject){
        if(array_key_exists(strtolower($pattern),$this->validate)){
            $pattern = $this->validate[$pattern].$this->fixMode;
        }
        $this->returnMatchResult ?
            preg_match_all($pattern , $subject ,$this->matches) :
            $this->isMatch = preg_match($pattern , $subject ) === 1;
        return $this->getRegexResult();
    }

    private function getRegexResult(){
        if($this->returnMatchResult){
            return $this->matches;
        }else{
            return $this->isMatch;
        }
    }

    public function  toggleReturnType($bool = null){
        if(empty($boll)){
            $this->returnMatchResult = !$this->returnMatchResult;
        }else{
            $this->returnMatchResult = is_bool($bool) ? $bool : (bool)$bool;
        }
    }
    //重新定义修正模式
    public function  setFixMode($fixMode){
        $this->$fixMode = $fixMode;
    }

    public function noEmpty($str){
        return $this->regex('require',$str);
    }

    public function is_email($email){
        return $this->regex('email',$email);
    }

    public function is_mobile($mobile){
        return $this->regex('mobile',$mobile);
    }
    //自定义正则
    public function check($pattern,$subject){
        return $this->regex($pattern,$subject);
    }






}